#ifndef HPLC_QINFINE_PUMP_PROTOCOL_H
#define HPLC_QINFINE_PUMP_PROTOCOL_H

#include "common/hplcqinfineprotocolcommon.h"
#include "common/hplcqinfinesendcommonsystempacket.h"
#include "hplcqinfinepumpparsepacket.h"
#include "hplcqinfinepumpparsesystempacket.h"
#include "hplcqinfinepumpsendpacket.h"
#include "hplcqinfinepumpsendsystempacket.h"
#include "modulehplcpumpdefine.h"

namespace hplc
{
namespace qinfine
{

class HplcQinfinePumpProtocolData;
class HplcQinfinePumpProtocol : public HplcQinfineProtocolCommon
{
    Q_OBJECT
public:
    HplcQinfinePumpProtocol(PumpParam &param, QObject *parent = nullptr);
    virtual ~HplcQinfinePumpProtocol() override;

    virtual bool setProtocolCmd(int id, QVariant &var) override;
    virtual bool getProtocolCmd(int id, QVariant &var) override;

    HplcQinfinePumpParsePacket *getPumpParser();
    HplcQinfinePumpParseSystemPacket *getPumpSystemParser();

    HplcQinfinePumpSendPacket *getPumpSender();
    HplcQinfinePumpSendSystemPacket *getPumpSystemSender();

    HplcQinfineSendCommonPacket *getCommonSender();
    HplcQinfineSendCommonSystemPacket *getCommonSystemSender();

protected:
    virtual void setModel(quint8 model) override;

    HplcQinfinePumpProtocol(HplcQinfinePumpProtocolData &data, PumpParam &param, QObject *parent = nullptr);

private:
    hplc::PumpParam			*m_param = nullptr;
};

} // qinfine
} // hplc

#endif // HPLC_QINFINE_DETECTOR_PROTOCOL_H
